package io.youngledo.usb.util;

import java.io.File;

/**
 * 文件相关工具类
 */
public class FileUtils {

    /**
     * 格式化文件大小
     */
    public static String formatSize(long size) {
        if (size < 1024) return size + " B";
        if (size < 1024 * 1024) return String.format("%.1f KB", size / 1024.0);
        if (size < 1024 * 1024 * 1024) return String.format("%.1f MB", size / (1024.0 * 1024));
        return String.format("%.1f GB", size / (1024.0 * 1024 * 1024));
    }

    /// 生成唯一的文件名，避免覆盖已存在的文件
    ///
    /// 如果文件已存在，会自动添加数字后缀，如：
    /// - file.txt -> file (1).txt
    /// - file (1).txt -> file (2).txt
    ///
    public static File getUniqueFile(File directory, String fileName) {
        File targetFile = new File(directory, fileName);

        // 如果文件不存在，直接返回原文件名
        if (!targetFile.exists()) {
            return targetFile;
        }

        // 分离文件名和扩展名
        String baseName;
        String extension;
        int lastDotIndex = fileName.lastIndexOf('.');

        if (lastDotIndex > 0 && lastDotIndex < fileName.length() - 1) {
            baseName = fileName.substring(0, lastDotIndex);
            extension = fileName.substring(lastDotIndex);
        } else {
            baseName = fileName;
            extension = "";
        }

        // 查找可用的文件名
        int counter = 1;
        do {
            String newFileName = baseName + " (" + counter + ")" + extension;
            targetFile = new File(directory, newFileName);
            counter++;
        } while (targetFile.exists() && counter < 1000); // 防止无限循环

        return targetFile;
    }

    private FileUtils() {
        // 工具类，防止实例化
    }
}